#include "search.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPixmap>
#include <QPainterPath>
#include <QRegion>
#include <QEvent>

// 构造函数
Search::Search(QWidget *parent)
    : QWidget(parent)
{
    // 设置窗口为无边框，固定大小
    this->setWindowFlag(Qt::FramelessWindowHint);
    this->setFixedSize(260, 42); // 控件高度设置为 36px

    // 外部布局
    hlayout_ex = new QHBoxLayout(this); // 用于包含内部布局
    hlayout_ex->setContentsMargins(0, 0, 0, 0); // 外部布局没有额外边距

    // 内部布局
    hlayout_in = new QHBoxLayout(); // 用于排列子控件
    hlayout_in->setContentsMargins(4, 6, 4, 6); // 调整上下左右边距 (修改点1)
    hlayout_in->setSpacing(6); // 子控件之间的间距为 6px (修改点2)

    // 搜索图标 QLabel
    Search_icon = new QLabel(this);
    QPixmap pixmap(":/new/prefix1/img/search1.png");
    Search_icon->setPixmap(pixmap.scaled(20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation)); // 图标缩放到 20x20
    Search_icon->setFixedSize(24, 24); // 图标容器大小设置为 24x24
    Search_icon->setAlignment(Qt::AlignCenter); // 图标居中对齐 (修改点3)

    // 关闭按钮 QPushButton
    pb_close = new QPushButton(this);
    pb_close->setFixedSize(24, 24); // 按钮大小设置为 24x24
    pb_close->setText("");          // 按钮无文字
    pb_close->setVisible(false);    // 初始状态隐藏按钮

    // 设置按钮样式
    pb_close->setStyleSheet(
        "QPushButton {"
        "   border:none;"                         // 去掉边框
        "   background: transparent;"              // 设置背景透明
        "   image: url(:/new/prefix1/img/close1.png);" // 默认图标
        "} "
        "QPushButton:hover {"
        "   image: url(:/new/prefix1/img/close2.png);" // 悬浮时的图标
        "}");

    // 信号与槽的连接，点击按钮触发 onCloseButtonClicked
    connect(pb_close, &QPushButton::clicked, this, &Search::onCloseButtonClicked);

    // 搜索输入框 QLineEdit
    lineEdit = new QLineEdit(this);
    lineEdit->setPlaceholderText("搜索"); // 设置占位符文字
    lineEdit->setFocusPolicy(Qt::NoFocus); // 初始状态下不允许获取焦点
    lineEdit->setStyleSheet("QLineEdit {"
                            "border:none;"       // 无边框
                            "background: transparent;" // 透明背景
                            "font-size: 14px;"    // 字体大小适配
                            "}");                 // 设置样式表
    lineEdit->setFixedHeight(24);                 // 输入框高度为 24px

    // 布局调整
    hlayout_in->addWidget(Search_icon, 0, Qt::AlignVCenter); // 图标垂直居中 (修改点4)
    hlayout_in->addWidget(lineEdit, 1, Qt::AlignVCenter);    // 输入框垂直居中
    hlayout_in->addWidget(pb_close, 0, Qt::AlignVCenter);    // 关闭按钮垂直居中

    // 将内部布局添加到外部布局
    hlayout_ex->addLayout(hlayout_in);

    // 设置外部布局为当前窗口的布局
    this->setLayout(hlayout_ex);

    // 设置窗口默认背景为灰色，带圆角
    this->setAttribute(Qt::WA_StyledBackground, true);
    this->setStyleSheet("background-color: #e2e2e2; border-radius: 5px;"); // 圆角调整为 18px

    this->applyRoundedMask(); // 应用圆角遮罩

    // 为输入框安装事件过滤器
    lineEdit->installEventFilter(this);

}

// 事件过滤器
bool Search::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == lineEdit) {
        if (event->type() == QEvent::MouseButtonPress) {
            // 输入框被点击时
            this->setStyleSheet("background-color: white; border-radius: 5px;"); // 设置白色背景
            lineEdit->setPlaceholderText("");       // 清空占位符文字
            lineEdit->setFocus();                  // 获取焦点
            lineEdit->setFocusPolicy(Qt::StrongFocus); // 设置输入框为强焦点
            pb_close->setVisible(true);            // 显示关闭按钮
            return true;                           // 拦截事件
        } else if (event->type() == QEvent::FocusOut) {
            // 输入框失去焦点时
            this->setStyleSheet("background-color: #e2e2e2; border-radius: 5px;"); // 恢复默认背景
            lineEdit->setPlaceholderText("搜索"); // 恢复占位符文字
        }
    }
    return QWidget::eventFilter(obj, event);
}

// 应用圆角遮罩
void Search::applyRoundedMask()
{
    QPainterPath path;
    int radius = 3;                              // 设置圆角半径
    path.addRoundedRect(this->rect(), radius, radius); // 绘制圆角矩形
    QRegion region(path.toFillPolygon().toPolygon()); // 转换为区域
    setMask(region);                              // 应用遮罩
}

// 关闭按钮的槽函数
void Search::onCloseButtonClicked()
{
    pb_close->setVisible(false); // 隐藏关闭按钮
}

// 析构函数
Search::~Search()
{
}
